1

最小化背景(即在裸伪代码细节中)

我正在为我的农场制作记录(除其他外)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 但我并不担心,只是额外表是否引用两者表是最好的方法。

谢谢;

4

1 回答 1

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))
于 2013-07-29T15:50:00.440 回答