请建议设计数据库的最佳方法
我有一个名为 Pages
的表和一个名为 Categories
的表。 Pages
表的每个条目都链接到Categories
表。 Categories
表有 5 个条目,它们是:Car
、Websites
、Technology
、Mobile Phones< /code> 和
兴趣
。
因此,每次我将条目放入 Pages
表时,我都需要将其映射到 Categories
表,以便正确排列。
这是我的表格:
Pages
id [PK]
name
url
Categories
id [PK]
Categoryname
Pages2Categories
Pages.id
Categories.id
所以我的问题是,这是在表之间创建这种关系的最有效方法吗?看起来很业余
I have a table named Pages
and a table named Categories
. Each entry of the table Pages
is linked to the table Categories
. The Categories
table has 5 entries, they are: Car
, Websites
, Technology
, Mobile Phones
, and Interest
.
So each time I put an entry to the Pages
table, I need to map it to the Categories
table so are arranged properly.
Here's my table:
Pages
id [PK]
name
url
Categories
id [PK]
Categoryname
Pages2Categories
Pages.id
Categories.id
So my question is, is this the most efficient way to create this kind of relationships between tables? It seems very amateur
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
如果每个页面必须恰好有 1 个类别,请将类别 ID 放入表 Pages 中。
如果每个页面可以选择有一个类别,而大多数页面没有一个类别,请将 (page_id,category_id) 放在一个带有主键 (page_id) 的单独表中。
如果每个页面可能有多个类别,请使用您建议的方法。
此时不必担心空间或性能。
If each page must have exactly 1 category, put the category ID in table Pages.
If each page optionally have one category and most pages does not have one, put the (page_id, category_id) in a separate table with primary key(page_id)
If each page may have several categories, use the approach you suggested.
Don't worry about space or performance at this point.
由于“类别”是“页面”的一个属性,因此最好将该属性保留在“页面”表中。为了节省空间,您可以对“类别”列使用整数/数字数据类型。例如,1 = 汽车,2 = 网站,3 = 技术等等。
Since ¨category¨ is an attribute of a ¨page¨, it is best to keep that attribute in the ¨pages¨ table. To save space, you could use an integer/number data type for the ¨category¨ column. e.g 1 = Car, 2 = Websites, 3 = Technology and so forth.
一个建议:有 2 个表 - “页面”和“类别”。页面中的列有:
名称 [varchar]
网址 [varchar]
Category [tinyint]
对于类别,按照您的设计:
catID [1|2|4|8|16](5 个类别有 5 个可能的值)
catName [varchar]
我假设您的类别数较少 (<8),如果此计数达到 31,请使用整数代替(每行使用 4 个字节而不是 1 个字节)。现在,页面表中的类别不必是其他表的 FK。如果 URL 属于多个类别,则可以在 jdbc 代码中对插入/更新执行逻辑 OR 操作,对选择执行 AND 操作。可能不是最好的数据库设计,但这应该最大限度地减少您消耗的数据库空间,以防您必须保存数百万页。从你的问题陈述中,我不明白为什么你需要表中的 PK...消除它以在每行中节省更多字节。问候, - MS
One suggestion: Have 2 tables - "pages" and "category". Columns in pages are:
Name [varchar]
URL [varchar]
Category [tinyint]
For Category, as you designed:
catID [1|2|4|8|16] (5 possible values for 5 categories)
catName [varchar]
I assume you have a small # of categories (<8), if this count goes upto 31, use an integer instead (using 4 instead of 1 byte per row). Now Category in the pages table need not be an FK to the other table. You could do a logical OR for insert/update and AND for select in your jdbc code if an URL belongs to more than 1 category. May not be the best DB design, but this should minimize the db-Space you consume, in case you have to save millions of pages. From your problem statement, I do not see why you need a PK in the table... eliminate it to save a few more bytes in every row. Regards, - M.S.