이렇게 데이터베이스 설계해도 괜찬을까요?

gurumong의 이미지

사실 괜찬은지 안괜찬안지를 여쭙는게 아니라
이런 방식의 설계가 권장할만한 것인지 다른 대안이 없는지에 대해서 여쭙고 싶습니다

두개의 A, B테이블이 있고 카디널리티 1:n의 관계가 성립되어있습니다
관계는 B테이블에서 A테이블로의 외래키 참조로 정의됩니다
그림) A----<1:n관계>----B

문제는 이 관계가 대략 1:700 정도가 되고
각각의 평균 요약 정보가 필요한 부분이 종종있어서
A테이블에 추가적인 필드로 B테이블의 요약 정보인 평균xx, 평균yy, 평균zz 자료를 넣어볼까 하거든요
(평균 계산이 전체합/n 이 아닌 여러 필드가 참여하는 복잡한것도 있습니다)

그런데 이렇게 하면 B테이블에 자료를 삽입할때마다
A테이블의 요약정보와 B테이블의 자료와의 불일치가 발생하고
이를 별도로 갱신을 해줘야하는것을 잊어서는 안되고 가급적 빨리 수행해줘야하는데

이건 코딩시 프로그래머의 기억과 꼼꼼함에 의지하는것이지
보통 데이터베이스에서 말하는 일관성(논리적으로 일치), 무결성(데이터의 정확성)이 깨어지지 않음을 시스템에서 보장해주는것은 아니라서 알아차리기 힘들잖아요

더 나은 성능을 위해 설계상 필요한듯 하면서도
데이터베이스 관점에서는 좋은 설계는 아닌것 같기도 하고
이런 종류의 문제에 다른 나은 설계나 해결 방법이 있는지 조언 부탁드립니다 (_ _)

...!의 이미지

> 이건 코딩시 프로그래머의 기억과 꼼꼼함에 의지하는것이지

본질적으로 모든 일이 그렇습니다. 정도의 차이만 있을 뿐이지요. 더군다나 해야할 일이 복잡해지면 dbms에 맡길 수 있는 일은 줄어들기 마련입니다. 다뤄야할 데이터의 무결성 등등은 dbms가 아니라 그냥 다스크에 저장하든 뭘하든 항상 최종적으로는 프로그래머의 코드에 의해 보장되는 겁니다. 이왕이면 이미 잘 만들어져있는 시템이 있으니 dbms에 맡길 수 있는 부분은 최대한 맡길 뿐인거지요.

통계 정보를 전혀 저장하지 않고 필요할 때마다 계산하는 것이 문제 발생을 원칙적으로 차단하는 것이기는 하지만 그게 현실적이지 않으면 따로 저장하셔도 무방합니다. 트랜잭션이 그런 때에 쓰라고 있는 것이지요. 아마도 isolation level을 높게 잡아야할 상황인 것 같은데 동시 접근성이 떨어지는 것은 어쩔 수 없습니다. 얻는 것이 있으면 잃는 것도 있을 수 밖에요.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.