最小化背景(即在裸伪代码细节中)
我正在为我的农场制作记录(除其他外)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)
所以问题:
- 显然,一张图片中可能有多个山羊,所以我不能只在图片中有一个外键来指代山羊。
- 有不止一张牲畜桌也会使这是一个糟糕的选择,但现在并不担心
- 到目前为止,基本上还没有应用任何优化(即没有设置长度,使用 TEXT 而不是 varchar(length))等;我并不担心,直到我填充了一堆并确切地看到我想要所有东西多长时间。
所以问题是:将图片链接到多只山羊的最佳方式 是什么(就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 但我并不担心,只是额外表是否引用两者表是最好的方法。
谢谢;