Любой из них кажется исправным.Вам приведен пример запросов , которые должны выполняться в вашей системе?Если да, пытались ли вы написать эти запросы и посмотреть, не усложняет ли та или иная структура все эти запросы?Кроме того, рассмотрели ли вы, какие ограничения целостности вы, возможно, пожелаете применить к базе данных?
Например, нахождение текущего баланса счета может быть разумно выполнено с использованием любой структуры .:
SELECT
ac.AcNumber,
SUM(CASE WHEN DrCr = 'Cr' THEN Amount
ELSE -Amount END) as Balance
FROM
Accounts ac
inner join
Voucher v
on
ac.AcID = v.AccountNo
WHERE
ac.AcNumber = 1010
GROUP BY
ac.AcNumber
SELECT
ac.AcNumber,
SUM(CASE WHEN V2DebitAc = V2CreditAc THEN 0
WHEN V2CreditAc = ac.AciD THEN Amount
ELSE -Amount END) as Balance
FROM
Accounts ac
inner join
Voucher_2 v
on
ac.AcID = v.V2DebitAc or
ac.AcID = v.V2CreditAc
WHERE
ac.AcNumber = 1010
GROUP BY
ac.AcNumber
Если все транзакции должны быть сбалансированными , как вы будете гарантировать, что в Voucher
всегда есть пары строк, которые соответствуют друг другу?
Если у вас естьчтобы применить проценты к другим исправлениям учетной записи, с какой учетной записью вы будете сопоставлять учетные записи в Voucher_2
?
Если вам не было предложено ни одного сценария для работы, попробуйте придумать некоторые из них, как указано выше, и посмотрите, какхорошо они подходят.Однако без дополнительной информации я бы сказал, что любой из них, вероятно, сработает.
Одна вещь, которую я бы серьезно порекомендовал исправить, хотя - наличие всех AcNumber, AccountNum и AcID похоже на рецепт путаницы.Вероятно, я бы просто использовал AcID
везде за пределами таблицы Accounts
, если только вы не хотите пойти еще дальше и просто использовать AcNumber
в качестве естественного ключа и использовать его везде и удалить AcID
с картинки.Конечно, я не ожидал (до написания запросов), что я найду AccountNum
также на картинке, и это не то же самое, что AcNumber
.
Где возможно ясоветую использовать как можно меньше имен .В идеале, везде в вашей схеме, где вы встречаете определенное имя столбца , это должно означать одну и ту же концепцию, и вы не должны встречать ту же концепцию под любыми другими именами.