最小化背景(即裸露的伪代码细节)
我正在为我的农场制作记录(除其他外)php / mysql应用程序。有很多类型的动物等可以有图片(或其他记录 - 视频等),但为了简单起见,我只会参考其中一个(山羊和图片)。所以说
表格大致如下:CREATE TABLE BMD_farmrecords_goats (
goat_id INT NOT NULL AUTO_INCREMENT,
goat_name TEXT,
...more columns but whatever, unimportant...
primary_key(goat_id))
CREATE TABLE BMD_farmrecords_pictures (
media_id INT NOT NULL AUTO_INCREMENT,
media_name TEXT,
media_description TEXT,
media_description_short TEXT,
media_date_upload DATE,
media_date_taken DATE,
media_uploader INT, //foreign key constrained to user table but unimportant for question
media_type ENUM('jpg','gif','png'),
media_hidden BOOL,
media_category INT, //foreign key constrained to category table but unimportant for question
PRIMARY KEY (media_id)
所以问题: 什么是将图片链接到多只山羊的最佳_ 方式(就A而言)最佳性能B)最佳代码符合标准。我想我将不得不做一个额外的桌子:
create TABLE BMD_farmrecords_goatpictures (
id INT NOT NULL AUTO_INCREMENT
picture_id INT //foreign key to BMD_farmrecords_pictures->media_id
goat_id INT//foreign key to BMD_farmrecords_goats->goat_id
那么还有更好的方法吗?
当然使用该方法我可能不得不将* _goats表更改为父* _animals表,然后使用类型字段和引用animal_id,但我不担心,只是关于是否额外引用两个表的表是最好的方法。
感谢;
答案 0 :(得分:0)
从讨论中改变我原来的想法到使用复合主键:
create TABLE BMD_farmrecords_goatpictures (
picture_id INT //foreign key to BMD_farmrecords_pictures->media_id
goat_id INT//foreign key to BMD_farmrecords_goats->goat_id
PRIMARY KEY (picture_id, goat_id))