数据库:在一个表中共享两组值?
首先我要说的是,我不是 DBA,而且到目前为止我还没有进行过大量的数据库开发(所以我希望我没有问一些显而易见的问题)。
挑战:
- 我有一个带有预定义值的字典应用程序。
- 可以通过在线更新添加新值。
- 用户不允许修改这些应用程序值,但他们可以添加/删除自己的值。
- 数据库 (sqlite3) 将包含少量值 (~2K-3K)。
- 用户值和应用程序值的数据库架构完全相同。
可能的解决方案:
解决这个问题的一种方法是创建两个具有相同架构的不同表,并在查询数据库时连接两个表中的数据。
另一种方法是使用一个表,其中应用程序值将从 ID=0 开始,用户值将从 ID=100000 开始(例如)。在线更新将合并 ID=100000 以下的新值,以便用户值保持不变。
我更喜欢第二种解决方案 - 它会在运行时避免 JOIN,并且查询将保持简单。
但是,对第一个解决方案中的应用程序值的更新将要求我将应用程序表替换为新的应用程序表。
请告诉我您的想法:
- 哪种解决方案更好?
- 我缺少哪些优点/缺点?
- 有更好的第三种解决方案吗?
I'll start by saying I am not a DBA and I didn't get to do heavy database development so far (so I hope I'm not asking something obvious).
The Challenge:
- I have a dictionary application with pre-defined values.
- New values may be added via online updates.
- Users are not allowed to modify these application-values, but they may add/delete values of their own.
- The database (sqlite3) will contain a small amount of values (~2K-3K).
- The database schema is exactly the same for both user and application values.
Possible solutions:
One way to go about it would be to create two different tables having the same schema, and JOIN the data from both tables when querying the database.
A different approach would be to have a single table in which application-values will start at ID=0, and user-values will start at ID=100000 (for example). Online updates will merge new values below ID=100000 such that user values will remain intact.
I prefer the second solution - it'll avoid JOINs during runtime and the queries will remain simple.
However, an update to the application-values in the first solution would require me to just replace the application table with the new one.
Please let me know what you think:
- Which solution is better?
- What are the pros/cons that I'm missing?
- Is there an even-better third solution?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
为什么不只是在表中“键入”一列并用用户/应用程序填充它?
就我个人而言,我讨厌有意义的ID......
Why not just a column 'type' to your table and fill it with user/application?
Personaly I hate meaningfull ID's....