插入由特定用户保存到数据库的多个URL的最佳方法是什么?

时间:2015-06-01 19:09:55

标签: java mysql sql

我正在建立一个用户保存网址的书签网站。那么将用户的所有网址插入数据库(mysql)的最佳方法是什么。

1)为个人用户创建单独的表。在每个表中创建1列,每行放置1个URL(每个单元格)。

2)创建1个表,并根据用户的行将所有URL插入单个单元格中。

如果第二个选项最好,那么任何人都可以解释我该怎么做吗?我可以在一个单元格中插入一个网址但是如何将所有网址插入到单个单元格中并再次检索它以正确方式显示。 感谢您花时间阅读我的问题。我努力做到这一点,但失败了。这就是问这里的原因。

1 个答案:

答案 0 :(得分:3)

使用以下列创建bookmark表:(id, fk_user_id, url)。每个条目都有自己的id,外键是用户的id。

您不希望为每个用户创建单个表。那不会扩展!想象一下,你有一千个用户 - 至少有一千张桌子!

第二种方法可以工作,但存在以下问题:

  • 要添加URL,您必须读入现有值,附加新值,然后将其写回。这是为了添加新值而进行的两个数据库操作。如果采用外键方法,则只需执行一次写操作即可。
  • 虽然可能不太可能,但您可能会遇到一个用户正在使用两个客户端的情况,并且您最终会收到一个请求,以便在接近同一时间从两个客户端添加书签。这可能导致一致性问题。例如,假设您在列中已经有http://google.com,而客户#1想要添加http://reddit.com,而客户#2想要添加http://stackoverflow.com。如果客户端#2在 客户端#1的数据被保留之前读入值,您将最终得到http://google.com, http://reddit.comhttp://google.com, http://stackoverflow.com,具体取决于最后写入该表的人。如果您在接近同一时间从同一客户端收到多个添加请求,则甚至可能发生这种情况。
  • 添加删除书签,您的一致性问题可能会变得更糟。删除也变得更加困难,因为您不必简单地通过书签ID删除,而是必须提取数据,拆分数据,然后对URL进行字符串比较以找出您需要删除的内容,然后编写修改后的内容数据回来了。如果您最终在同一时间内收到多个删除请求,该怎么办?您遇到了与添加新URL的情况相同的问题。