我如何为 SQL 中的类别设计架构?
how do i design schema for categories in SQL?
我正在为帖子、链接编写此网络应用程序。用户可以向这些 links/posts 添加类别。随着网站规模的扩大,这些类别的数量也会增加。我如何在 SQL 模式中实现它?我应该使用什么数据类型? TEXT 数据类型是存储用户帖子的好方法吗?
显然,首先 你应该做的事情是浏览 GitHub 和其他已经这样做的现有工作的地方。 (也许你可以简单地使用一些已经写好的东西!)
理论上:"links/posts"和"categories"之间的关系称为多对多。(一个link/post可能有"many" 属性,并且给定的属性可以分配给 "many" links/posts。)因此,使用中间 table,如以下简单示例所示:
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。 ;-)
当给定的 post 具有特定属性时,LINKS_POSTS_ATTRIBS
table 中的一个条目代表它。 FOREIGN KEY
属性规定值必须与外部 table 中的现有条目相匹配。 UNIQUE INDEX
避免重复。
进一步 "referential integrity" 约束应根据需要使用以规定,例如,如果任何 LINKS_POSTS_ATTRIBS
条目引用属性行,则不得删除它。
我正在为帖子、链接编写此网络应用程序。用户可以向这些 links/posts 添加类别。随着网站规模的扩大,这些类别的数量也会增加。我如何在 SQL 模式中实现它?我应该使用什么数据类型? TEXT 数据类型是存储用户帖子的好方法吗?
显然,首先 你应该做的事情是浏览 GitHub 和其他已经这样做的现有工作的地方。 (也许你可以简单地使用一些已经写好的东西!)
理论上:"links/posts"和"categories"之间的关系称为多对多。(一个link/post可能有"many" 属性,并且给定的属性可以分配给 "many" links/posts。)因此,使用中间 table,如以下简单示例所示:
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。 ;-)
当给定的 post 具有特定属性时,LINKS_POSTS_ATTRIBS
table 中的一个条目代表它。 FOREIGN KEY
属性规定值必须与外部 table 中的现有条目相匹配。 UNIQUE INDEX
避免重复。
进一步 "referential integrity" 约束应根据需要使用以规定,例如,如果任何 LINKS_POSTS_ATTRIBS
条目引用属性行,则不得删除它。