我试图保持网站用户收入的记录,但在性能和整体可用性方面,以下哪种设计最适合我:

•第一种方式:

这样,将创建一个包含每年表格的数据库。每个表将有13列,用户ID和12个月。每个字段的值将是一个字符串化的数组,其中包含当月所有天的值,例如:[12.5, 28.3, 9.75, ...]

码:

-- Create a database to keep record of the earnings of all users.
CREATE DATABASE IF NOT EXISTS `Earnings_Record`;

-- Create a table for each year containing 13 columns, the user ID and the 12 months.
CREATE TABLE IF NOT EXISTS `Earnings_Record`.`Earnings_2017` (
    `ID` INT(11) NOT NULL,
    `January` VARCHAR(250) NOT NULL,
    `February` VARCHAR(250) NOT NULL,
    ...
    `December` VARCHAR(250) NOT NULL,
    PRIMARY KEY (`ID`)
) ENGINE = InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci;




•第二种方式:

这样,将创建多个数据库,每年一个,每个月都有一个表。每个表格将包含28-31 +1列,用户ID和28-31天。每个字段的值将是一个小数,例如:12.5

码:

-- Create a database to keep record of the earnings of all users for 2017.
CREATE DATABASE IF NOT EXISTS `Earnings_2017`;

-- Create a table for each month with 28-31 + 1 columns, the user ID and the 28-31 days.
CREATE TABLE IF NOT EXISTS `Earnings_2017`.`January` (
    `ID` INT(11) NOT NULL,
    `Day 1` DECIMAL(10, 2) NOT NULL,
    `Day 2` DECIMAL(10, 2) NOT NULL,
    ...
    `Day 31` DECIMAL(10, 2) NOT NULL,
    PRIMARY KEY (`ID`)
) ENGINE = InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci;




由于该网站有望运行5-10年,因此在整体性能和长期可维护性方面,这是设计此网站的最佳方法吗?

(要记住的一件事是,活跃用户每天都会多次更新每个用户的收入)

最佳答案

第三方式:

创建一个数据库。为每个实体创建一个表:

CREATE DATABASE IF NOT EXISTS Earnings_Record;

CREATE TABLE IF NOT EXISTS Earnings_Record.Users (
    UsersId INT AUTO_INCREMENT PRIMARY KEY,
    . . .
);

CREATE TABLE IF NOT EXISTS Earnings_Record.Earnings (
    EarningsID INT AUTO_INCREMENT PRIMARY KEY,
    UserId INT NOT NULL,
    EarningsDate DATE,
    Amount DECIMAL(10, 2)  -- or whatever
    CONSTRAINT fk_Earnings_UserId FOREIGN KEY (UserId) REFERENCES Users(UserId)
) ;


简单。易于查询。正是您所需要的。这是表示数据的SQL方法。

09-29 19:59