数据库模式 - 用户订阅

问题描述:

我的数据库中有一个订阅模型,用于订阅某些月份的课程。有几种类型的分配。用户可以:数据库模式 - 用户订阅

  1. 采购过程中X个月的订阅与信用卡
  2. 采购过程中X个月的订阅通过输入一些激活码
  3. 系统管理员分配给用户X月订阅。

如果用户更新他/她的订阅我没有删除旧的,我创建的订阅表中的新记录,并保留旧的历史,此外,如果相同的订阅由管理员更新我再次创造新纪录。 用户的当前订阅由最后一条记录标识。用户过期的过期日期是显示在最新记录中的日期。 例如,如果您检查附加的屏幕截图。

enter image description here

用户1具有三个订阅,其中一人说,当然必须在6月15日到期,然而真实的截止日期为6月14日,因为这是该用户的最新记录 - 当然组合。

为什么我保留所有这些记录(而不只是更新现有的用户课程到期日期)是因为我需要这个历史。如果出现问题,我会一直能够找到出现错误的地方。

我认为你有我的想法,我的问题是,如果这是一个很好的解决方案,以及如何更好的实现想法。

谢谢你的时间。

+0

*“但实际到期日期为6月16日,因为这是此用户 - 课程组合的最新记录。”*不,用户1的最新时间戳记是6月15日。存储实际数据。如果您有到期日期的列,请在该列中存储到期日期。不要在该栏中存储“到期日前一天”。 – 2013-05-11 12:14:04

+0

我很抱歉我的排字错误,应该说6月14日而不是16日。 编辑后 – 2013-05-11 12:38:01

我没有经历过太多与相关表的,但我想补充,而不是重复subscription表3个字段records表,执行插入/选择(与内部连接)进/出records

注意:把它作为一个例子,而不是一个真正的应用程序模式。

CREATE TABLE `Subscriptions` (
    `id` INT NOT NULL AUTO_INCREMENT, 
    PRIMARY KEY (`id`) 
); 

CREATE TABLE `users` (
    `id` INT NOT NULL AUTO_INCREMENT, 
    PRIMARY KEY (`id`) 
); 

CREATE TABLE `courses` (
    `id` INT NOT NULL AUTO_INCREMENT, 
    PRIMARY KEY (`id`) 
); 

CREATE TABLE `records` (
    `user_id` INT NOT NULL, 
    `course_id` INT NOT NULL, 
    `subscription_id` INT NOT NULL, 
    `date_start` TIMESTAMP, 
    `date_end` TIMESTAMP, 
    PRIMARY KEY (`user_id`, `course_id`, `subscription_id`) 
); 

我从头开始做这个,不知道下一个DO /完成上面。如果其他人可以改进这个答案,请成为我的客人。

ALTER TABLE `records` ADD CONSTRAINT `records_user` FOREIGN KEY (`user_id`) REFERENCES users(`id`); 
ALTER TABLE `records` ADD CONSTRAINT `records_course` FOREIGN KEY (`course_id`) REFERENCES courses(`id`); 
ALTER TABLE `records` ADD CONSTRAINT `records_subscription` FOREIGN KEY (`subscription_id`) REFERENCES Subscriptions(`id`); 
+0

我很抱歉,但我想我误解了你的答案。 我的订阅是: 用户 - 课程 - 到期日期。 当用户过期时,他/她需要新记录 用户 - 课程 - 到期日期。 那么,当它可能只有一个表时,做两张表“记录”和“订阅”的意义何在? – 2013-05-12 21:25:56

下面是我看到的选项。

  1. 每次更改订阅日期时都会添加新记录。好处是一个表来处理订阅和少写入到数据库,而不是#2,但多了很多记录是没有必要表

  2. 添加维持对问责制的目的更改历史记录审核表并编辑订阅表,而不是在每次更改时都添加新记录。在这里,你有2个写入数据库,但是你有一个更清洁的订阅DB和审核(当/如果需要检查)

任何人都知道这是好还是任何其他建议单独的表?

+0

在什么情况下订阅日期可能会改变?你是否考虑升级/降级不同的计划? – JCarlos 2017-10-12 02:22:41