我有两个表,分别是projsstudies,它们分别指向我正在构建的网站上的内容类型,而我的最新任务是我需要向每个项目中添加图像轮播并进行研究(和projs)。换句话说,每个项目和研究都需要有一个相关的图像轮播。

我在桌子旁的位置:

   projs
id  |    ...
----------------
  1 |    ...
  2 |    ...
  3 |    ...

   studies
id  |   ...
-----------------
  1 |   ...
  2 |   ...
  3 |   ...


我想去的地方或想去的地方:类似的东西

        projs
id  |    ...   | carid
------------------------
  1 |    ...   |   1
  2 |    ...   |   5
  3 |    ...   |   6

       studies
id  |   ...    | carid
-------------------------
  1 |   ...    |  2
  2 |   ...    |  3
  3 |   ...    |  4

     carousels
id
------
   1
   2
   3
   4
   5
   6

      carousel_assets
id  |   imgurl  | carid
  1 |    ...    |  1
  2 |    ...    |  2
  3 |    ...    |  1
  4 |    ...    |  1
  5 |    ...    |  5
  6 |    ...    |  2
  7 |    ...    |  3
  8 |    ...    |  4
  9 |    ...    |  3
 10 |    ...    |  4
 11 |    ...    |  3
 12 |    ...    |  2
 13 |    ...    |  2


每个表中的studies引用caridid

问题1:这是正确的设计吗????

我运行以创建两个新表的查询是

CREATE TABLE carousels (id MEDIUMINT NOT NULL AUTO_INCREMENT PRIMARY KEY;
CREATE TABLE carousel_assets (id MEDIUMINT NOT NULL AUTO_INCREMENT PRIMARY KEY, img VARCHAR (250), carid MEDIUMINT, FOREIGN KEY (carid) REFERENCES carousels(id) ON DELETE SET NULL;


现在我想做的是将carousels列添加到caridprojs。我试过了

ALTER TABLE projs ADD carid MEDIUMUINT, FOREIGN KEY (carid) DEFAULT NULL REFERENCES carousels(id);


并得到了非常描述性的错误


  您的SQL语法有误。检查手册
  对应于您的MySQL服务器版本以使用正确的语法
  在'MEDIUMUINT,外键(carid)附近默认NULL参考
  第1行的轮播(id)'


问题2:导致该错误的查询出了什么问题?

假设在每个页面上,与上面的示例中与轮播相关的studies /studies/?id=1,我都需要将所有图像都与该轮播相关联,查询应该是什么?

最佳答案

该错误具有足够的描述性。您在MEDIUMUINT中有错字。将其替换为MEDIUMINT

ALTER TABLE projs
ADD carid MEDIUMINT, FOREIGN KEY (carid) DEFAULT NULL REFERENCES carousels(id);

关于mysql - 这是正确的数据库设计吗?我为什么不,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32530660/

10-12 05:29