mysql - SQL 不同的表或存储为同一表中的文本

标签 mysql sql json

我有一个似乎无法解决的困境。

在一个页面上我有一个对象列表。这些对象中的每一个都是一个 slider - 就像 aribnb - https://www.airbnb.com/s/London--United-Kingdom?source=ds

在我存储有关该对象的信息的数据库中(它有除幻灯片之外的其他信息),我在想,将所有幻灯片的 URL 存储为文本 block 是最简单的。

URL       | other_field
-----------------------
url1,url2 | other stuff 

然后通过将它们转换为数组等在前端或后端处理它。

第二种方法是创建一个单独的表,我将在单独的行中存储每个 url 和 url 所属对象的 id

URL  | obj_ID
-------------
url1 | id1
url2 | id1
url3 | id2
.............

.我会做一个 group_concat(distinct X),它会将它们作为文本 block 返回给我。然后我会做同样的事情,将它们分开。

长话短说,我是将它们作为一个字段存储在初始表中还是单独的表中,每个都是它自己的行。 这两种方法的优点和缺点是什么?对我来说,将它们作为文本放在同一个表中似乎更容易,但我对此没有经验,所以我需要一些建议。

编辑:最终可用的格式将是一个 JSON,幻灯片是一个数组,或者是在适当的时候被拆分成一个数组的文本。

最佳答案

答案是……视情况而定。如果您将 URLS 视为文本 block 中的简单注释,那么将它们存储在一个字段中也许是有意义的。确保将字段长度设置得足够大。

但是,如果您认为您可能需要将 URL 视为关系实体……那么您需要走第二条路。那是什么意思?那么,如果将来您需要添加一个要求,不仅要存储 URL,还要存储它的简短描述怎么办?也许您需要添加一个事件日期以告知最后一次检查该 URL 是否有效的时间。也许您希望能够找到共享通用 URL 的对象。我并不是说这些应该是您的要求;我是说你不知道 future 的需求是什么。如果您非常确定这只是一个文本 block ,而且它永远只是一个文本 block ,那么确定……将它放在 VARCHAR(MAX) 字段中。尽管在建立需求的过程中,您会很想尝试将更多内容添加到该文本 block 中,这将使事情变得更加困难。

有时为了速度或简单性而打破常规形式是合适的,但您希望谨慎地这样做,并尽可能多地考虑 future 。

关于mysql - SQL 不同的表或存储为同一表中的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31172543/

相关文章:

java - JDBC 无法连接到数据库

mysql - 在数据库中存储不同时区用户的时间

c++ - 如何减少JSON对象?

ajax - 如何从 Pentaho xaction 输出 JSON?

python - 将字典的字典存储在 MySQL 数据库中

mysql - 通过自己的数据从表中获取

SQL 服务器模式审计?

mysql - 在两个mysql表中查找不同行的最快方法

java - 在 Hashmap 中将 JsonAnySetter 和 JsonAnyGetter 与 ArrayList 一起使用

javascript - json-server 中的 OR 运算符