Todos os itens da items
tabela possuem uma categoria que pode ser derivada da item_category
tabela.
+---------------------------------------------+
| items |
+---------------------------------------------+
| id | PK |
+--------------------+------------------------+
| item_category_id | FK(item_categories.id) |
+--------------------+------------------------+
A item_category
tabela faz referência a si mesma. Eu queria criar um sistema de categoria-> subcategoria-> sub-subcategoria etc. Não sei quantas subcategorias aninhadas haverá, então pensei que minha melhor aposta seria colocar essa estrutura em uma única tabela. Se item_category_id
for, NOT NULL
então ele tem um pai; caso contrário, é uma supercategoria e não tem um pai.
+-------------------------------------------+
| item_categories |
+-------------------------------------------+
| id | PK |
+------------------+------------------------+
| item_category_id | FK(item_categories.id) |
+------------------+------------------------+
É aqui que está minha pergunta. A doll_item
tabela é uma tabela dinâmica. Basicamente, um doll
pode ter muitos itens e item
pode pertencer a muitas bonecas. Mas há mais do que isso. Quero ter certeza de que, para cada doll
, na doll_item
tabela, seu correspondente item
vem de uma categoria única.
Tentei puxar item_category_id
para item
em cada linha; no entanto, temo que essa relação não imponha que item_id
e item_category_id
da items
tabela venham necessariamente da mesma linha. Sem esse requisito, a adição das duas últimas linhas na doll_item
tabela é inútil.
É possível impor isso usando MySQL?
+-------------------------------------------------------+
| doll_item |
+-------------------------------------------------------+
| doll_id | FK(dolls.id) |
+----------------------+--------------------------------+
| item_id | FK(items.id) |
+----------------------+--------------------------------+
| item_category_id | FK(items.item_category_id) |
+----------------------+--------------------------------+
| unique(doll_item.doll_id, doll_item.item_category_id) |
+-------------------------------------------------------+
obrigado
Quero ter certeza de que, para cada boneca na
doll_item
mesa, [cada] correspondenteitem
vem de uma categoria [diferente]
Use um composto UNIQUE KEY
.
Temo que esta relação não impõe que o
item_id
eitem_category_id
daitems
tabela venham necessariamente da mesma linha
Use um composto FOREIGN KEY
.:
CREATE TABLE item (
id INT NOT NULL,
item_category_id INT NOT NULL,
PRIMARY KEY (id),
INDEX (id, item_category_id) -- see note below
);
CREATE TABLE doll_item (
doll_id INT NOT NULL,
item_id INT NOT NULL,
item_category_id INT NOT NULL,
PRIMARY KEY (doll_id, item_id),
UNIQUE KEY (doll_id, item_category_id),
FOREIGN KEY (item_id, item_category_id)
REFERENCES item (id, item_category_id)
);
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras