2010-06-03 46 views
2

我不知道我应该在这里做什么...正确的方式来设置MySQL表

我有一个数据库大约20,000记录。每个记录都有大约20列。

我想为此数据库添加大约20个附加列,这些列将位于每条记录的加载不同URL的行上。大多数情况下,这些将是空白的。

什么是这样做的 “正确” 的方式:

  1. 添加额外的20列(youtubeurl,facebookurl等) (优点:只有一个URL调用//缺点:让我的数据库大得多)

  2. 添加一个包含三列的额外表格 - 我可以额外调用的'ID','URLType','URL'? (优点:保持主表//缺点小得多:需要额外的SQL查询)

我应该怎么做?

+0

我知道这是邪恶的,但我想我会试图在这里使用一个位掩码! Muhahahahaha – decompiled 2010-06-03 15:32:01

+0

20000条记录不是那么多,所以我建议你只是添加列。数据库管理系统旨在处理这种类型的事情,这是他们的目的。 – 2010-06-03 15:32:43

+0

我同意'Lex'的范围..我所看到的主要问题是URL的“类型”从不具体,并且可以随时更改。缺乏灵活性可能会使[EAV模型](http://en.wikipedia.org/wiki/Entity-attribute-value_model)成为更好的选择 – Matt 2010-06-03 15:35:04

回答

4

一切都是平等的,我会选择(2)。这使您可以保持数据规范化并提供灵活性,以便将来可以添加更多网站。

FWIW,这不需要额外的查询来选择数据,因为你可以加入其他表。但是,当然,这将需要额外的INSERT/UPDATE查询。

+0

如果使用ORM,甚至更新/插入都非常容易。 – Erik 2010-06-03 15:34:27

+0

当然,我只是想澄清一下,因为这是OP对此方法的担忧之一。 – 2010-06-03 15:36:44

+0

非常感谢。 Erik - 什么是ORM? – jamescridland 2010-06-03 15:42:03

2

选项2几乎肯定是更好的选择。它可以让您在未来添加新的Url类型更容易(只需创建新的URLType,而不必创建新列)。那么使用这些URL的页面就不必修改以适应新的URL类型;他们会把它从桌子上拿出来。换句话说,你只需要在一个地方而不是几个地方进行更改。

如果人们大多​​只有这些网址中的一小部分,那么将它拆分成一张单独的表格几乎肯定是一种可行的方法。

2

您要添加的所有内容都是一个网址。每个URL都与您当前记录中的一个(或更多)相关。因此,要么:

对于只有一个record- 网址表url和FK到记录表的网址

或可涉及到多个record- 网址表url_id和URL链接 URLS表record_id和url_id

相关问题