Citat:
Ursprungligen postat av Zhirgoyt
Nej, alltså samma attribut kommer att ha lika många "subattribut". Om Sara och Hand har attribut hår så kommer båda ha subattribut längd och färg (tex).
Tror att du missade lite vad han frågade..
1 Program ändras, vad som "stämmer" nu är inte altid samma som imorgon, Nya krav et.c. kommer in.
Så för att försöka förtydliga lite nu (Vi prata om databaser här inte program direkt..)
Vad skall hända om programmet försöker lägga till en användare Hans med attributet "färg " på sitt hår ?
Om du svara "kommer inte att hända" se punkt 1
Så du har 2 alternativ.
Antingen så blockeras denna addering av databasen. (Constraints i databasen )
Eller så godkänns det att lägga till användaren Hans.
Enklast att godkänna den tycker jag.
Kod:
CREATE TABLE users (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100)
);
CREATE TABLE attributes (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100)
);
create table userattributes (
userid int not null,
attributeid int not null,
FOREIGN KEY (userid) References users(id),
FOREIGN KEY (attributeid) References attributes(id)
);
insert into users (name) values("hans");
insert into attributes (name) values("hair");
insert into userattributes(userid, attributeid) values ( (select id from users where name='hans'), (select id from attributes where name='hair'));
- Vilka users har "hair" attributet ?
select userid from userattributes where attributeid=(select id form attributes where name='hair');
-- Vilka username gav frågan ovan..(OBS user.name är INTE IDENTITETEN, det är userid)
select users.name from userattributes join users on users.id=userattributes.userid where attributeid=(select id from attributes where name='hair');
Rekommendera googla lite på sql JOIN och experimentera lite med detta.
Tror att en mappnings tabell här som jag använde: userattributes kan nog behöva ha index.