【问题标题】:how do i design schema for categories in SQL?如何为 SQL 中的类别设计架构?
【发布时间】:2016-07-06 23:39:01
【问题描述】:

我正在为帖子、链接编写这个网络应用程序。用户将在这些链接/帖子中添加类别。这些类别的数量将随着网站的扩大而增加。如何在 SQL 模式中实现这一点?我应该使用什么数据类型? TEXT 数据类型是存储用户帖子的好方法吗?

【问题讨论】:

  • 您使用什么语言编写应用程序?我的建议是您对“标签”进行一些研究,因为我知道在如何设置它们等方面已经做了很多工作……而这正是您要设置的。
  • TEXT 或 VARCHAR 都应该适用于帖子(在 MySQL 5.0 及更高版本中都具有 65KB 的最大限制)。
  • 我要使用 golang。
  • 这是许多关于 SQL 或 MySQL 的书籍、教程和示例中的标准示例。请至少查询谷歌,然后你会找到类似这样的答案:stackoverflow.com/questions/5384183/… 或此mikehillyer.com/articles/managing-hierarchical-data-in-mysql 博客文章。请提出更具体的问题。

标签: mysql sql categories


【解决方案1】:

显然,您应该做的第一件事是浏览 GitHub 和其他地方以查找已经这样做的现有工作。 (也许你可以简单地使用已经写好的东西!)

从理论上讲:“链接/帖子”和“类别”之间的关系称为多对多。(链接/帖子可能具有“许多”属性,给定的属性可能被分配给“许多”链接/帖子。)因此,使用了一个中间表,如下面的简单示例所示:

CREATE TABLE LINKS_POSTS ( LINK_ID INTEGER, CONTENT TEXT) PRIMARY KEY (LINK_ID);

CREATE TABLE ATTRIBS ( ATTRIB_ID INTEGER, ATTRIB_NAME TEXT) PRIMARY KEY (ATTRIB_ID);

现在是魔法……

    CREATE TABLE LINKS_POSTS_ATTRIBS ( LPA_ID INTEGER, LINK_ID INTEGER NOT NULL, 
ATTRIB_ID INTEGER NOT NULL ) PRIMARY KEY (LPA_ID) 
FOREIGN KEY (LINK_ID) REFERENCES LINKS_POSTS (LINK_ID) 
FOREIGN KEY (ATTRIB_ID) REFERENCES ATTRIBS (ATTRIB_ID);

CREATE UNIQUE INDEX FOOBAR ON LINKS_POSTS_ATTRIBS(LINK_ID, ATTRIB_ID);

...(或类似的东西!)我在脑海中写下这个,所以可能有 tpyos 或 sintax erurs。 ;-)

当给定帖子具有特定属性时,LINKS_POSTS_ATTRIBS 表中的条目表示它。 FOREIGN KEY 属性规定值必须与外部表中的现有条目匹配。 UNIQUE INDEX 避免重复。

如有必要,应使用进一步的“参照完整性”约束来规定,例如,如果有任何 LINKS_POSTS_ATTRIBS 条目引用某个属性行,则不得删除它。

【讨论】:

    猜你喜欢
    • 2021-12-12
    • 2016-06-22
    • 1970-01-01
    • 1970-01-01
    • 2016-11-30
    • 2018-07-04
    • 2011-01-08
    • 1970-01-01
    • 2011-04-13
    相关资源
    最近更新 更多