J'écris l'application pour stocker et récupérer les données de prix du marché boursier que les données sont insérées quotidiennement. Je stocke les données pour chaque actif (Stock) et pour la plupart du marché dans le monde. Ceci est ma conception actuelle des tablesConception de base de données SQL Server pour les données de prix du marché boursier à haut volume
Pays Table:
CREATE TABLE [dbo].[List_Country]
(
[CountryId] [char](2) NOT NULL,
[Name] [nvarchar](100) NOT NULL,
[CurrenyCode] [nvarchar](5) NULL,
[CurrencyName] [nvarchar](50) NULL
CONSTRAINT [PK_dbo.List_Country]
PRIMARY KEY CLUSTERED ([CountryId] ASC)
)
Asset Tableau:
CREATE TABLE [dbo].[List_Asset]
(
[AssetId] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](max) NOT NULL,
[CountryId] [char](2) NOT NULL,
CONSTRAINT [PK_dbo.List_Asset]
PRIMARY KEY CLUSTERED ([AssetId] ASC)
)
contrainte de clé étrangère sur Pays:
ALTER TABLE [dbo].[List_Asset] WITH CHECK
ADD CONSTRAINT [FK_dbo.List_Asset_dbo.List_Country_CountryId]
FOREIGN KEY([CountryId])
REFERENCES [dbo].[List_Country] ([CountryId])
ON DELETE CASCADE
GO
STOCK_PRICE table:
CREATE TABLE [dbo].[Stock_Price_Data]
(
[StockPriceDataId] [int] IDENTITY(1,1) NOT NULL,
[AssetId] [int] NOT NULL,
[PriceDate] [datetime] NOT NULL,
[Open] [int] NOT NULL,
[High] [int] NOT NULL,
[Low] [int] NOT NULL,
[Close] [int] NOT NULL,
[Volume] [int] NOT NULL,
CONSTRAINT [PK_dbo.Stock_Price_Data]
PRIMARY KEY CLUSTERED ([StockPriceDataId] ASC)
)
contrainte de clé étrangère sur Asset:
ALTER TABLE [dbo].[Stock_Price_Data] WITH CHECK
ADD CONSTRAINT [FK_dbo.Stock_Price_Data_dbo.List_Asset_AssetId]
FOREIGN KEY([AssetId])
REFERENCES [dbo].[List_Asset] ([AssetId])
ON DELETE CASCADE
Ce qui me préoccupe à l'heure actuelle est la table Stock_Price_Data serait rempli de lignes à haut volume, par exemple pour un marché spécifique dans un pays, il peut y avoir facilement 20 000 actifs. Ainsi, en un an (260 jours de trading), je pourrais potentiellement avoir 5,2 millions de lignes pour chaque pays.
L'application n'empêche pas un utilisateur d'accéder à des données autres que le pays par défaut (qui est configuré lors de la connexion).
Est-ce une bonne idée d'avoir une table séparée (par exemple Stock_Price_Data_AU) pour chaque pays? Ou y a-t-il une meilleure façon de concevoir la base de données pour le scénario ci-dessus?
-Alan-
Ce n'est pas une grande quantité de données. Si vous avez des problèmes, alors revisitez votre conception. – DB101
Si inséré tous les jours je considérerais Stock_Price juste pour avoir PK de [AssetId], [PriceDate]. Y a-t-il un véritable but de [StockPriceDataId]. – Paparazzi
Si vous gérez des données dans un seul tableau, la maintenance est meilleure, créez uniquement des index sur la table afin que la récupération des données soit plus rapide. –