[HOME]: [Mac OS X]: [MacPython]: [Emacs]: [生存報告記]: [MacEmacs JP Project]: [NTEmacs JP Project]:

概要

データモデリングは根源にデータ中心指向が存在します。データをモデリングする意味を理解しないと失敗します。

データベース設計の手法としてしか認識されていない場合もあるようですが、必ずしもそうではありません。

モデリングをしていくうちに、特定のデータは永続化させる必要がある場合、データベースの必要が出るだけです。

データモデリングが正常にできない人に、オブジェクト指向設計は不可能だと思います。

ちなみに SpringFramework の開発中心にいるRod Johnsonはその著書の「Expert One-On-One J2EE Design and Development」の中でデータ(ベース)中心のモデリングを推奨している事も付記しておきます。

モデリング方法論

DATARUN

DATARUNはデータモデリング方法論の一つです。この方法論の基でUMLを利用して作図するのは意外といけます。

提唱者はD.Pascot

DATARUNは基本的に記法も含む方法論なのですが、その記法が特殊でサポートするツールがまれです。それが最大の欠点です。しかし、方法論としての本質は記法とは独立です。記法のみをいれかえる事も可能です(ただし工夫は必要です)。

C/S(クライアントサーバー)データベース設計入門―情報システムの新しい分析・設計法:DATARUNの考え方がわかります。(絶版ではありませんでした。)

失敗のないシステム開発入門―良いシステムは良い設計から:これは実質DATARUNの解説書です。しかしこの書籍のAmazonの書評はひどいな。ちゃんと内容読んでるのかな?

この方法論にはやや曖昧な部分もありますがデータ中心アプローチとオブジェクト指向の融合点をさぐろうとする時の参考になるでしょう。

http://www.pfu.fujitsu.com/silver/index.htm

http://www.ipsj.or.jp/members/SIGNotes/Jpn/09/1998/121/article011.html

http://leo.nit.ac.jp/~ohki/ohki/paper/ieice2001_1.htm

T字形ER

T字ERです。型ではありません。ティージケイイーアル

ぼくがあまり良く理解できてないのかも、、DATARUNの場合はD.Pascotの書籍とか読むと内容をかなり詳細に理解可能なのですが、T字形ERって最後はコンサルやセミナー受けてね的部分がある感じ。セミナー受けてないので理解できてないのでしょうか?

再読。結構誤解している部分があったようだ。

コード体系中心主義的な部分があります。ただ実際の業務だとコード体系こそが癌って場合が結構あるので、コード体系絶対主義は良くないと思います。

書籍の記述に論理学の記述があるのは当然なのだが、まっとうでかなり良いと思います。

T字形ERデータベース設計技法

論理データベース論考―データ設計の方法:数学の基礎とT字形ER手法

http://www.sdi-rad.com/ter/terter.html

T字形ER図の基礎知識

コラム 誰でも描けるER図

方法論の比較

完全な方法論ってのはないですが、ある程度属人性は排除可能です。

データモデリングツール

System Architect

http://www.sint.co.jp/siob/er/default.asp

Xupper

http://www.pfu.fujitsu.com/silver/

http://wiki.fdiary.net/kog/?ModelingTool

DBDesigner

http://fabforce.net/dbdesigner4/

DBDesigner4 マニュアル(日本語)

eclipse

GEF Eclipse Project

Clay

書籍

データモデリング基礎講座―データベース設計を楽しもう! --> -->

SyntaxError

Non-ASCII character '\xa5' in file /home/ubuntu/prj/moindata/data/plugin/macro/ISBN.py on line 22, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details (ISBN.py, line 22)

If you want to report a bug, please save this page and attach it to your bug report.

Traceback

A problem occurred in a Python script. Here is the sequence of function calls leading up to the error, in the order they occurred.

  1. /home/ubuntu/prj/sakitojp/moin/MoinMoin/request.py in run (self=<MoinMoin.request.RequestWSGI object>)

    1. 1205 self.page.send_page(self, msg=msg)
    2. 1206 else:
    3. 1207 handler(self.page.page_name, self)
    4. 1208
    5. 1209 # generate page footer (actions that do not want this footer use
    • handler = <function do_recall>
    • self = <MoinMoin.request.RequestWSGI object>
    • self.page = <MoinMoin.Page.Page instance>
    • self.page.page_name = u'\u30c7\u30fc\u30bf\u30e2\u30c7\u30ea\u30f3\u30b0'
  2. /home/ubuntu/prj/sakitojp/moin/MoinMoin/wikiaction.py in do_recall (pagename=u'\u30c7\u30fc\u30bf\u30e2\u30c7\u30ea\u30f3\u30b0', request=<MoinMoin.request.RequestWSGI object>)

    1. 444 except KeyError:
    2. 445 rev = 0
    3. 446 Page(request, pagename, rev=rev).send_page(request)
    4. 447 else:
    5. 448 Page(request, pagename).send_page(request)
    • global Page = <class MoinMoin.Page.Page>
    • request = <MoinMoin.request.RequestWSGI object>
    • pagename = u'\u30c7\u30fc\u30bf\u30e2\u30c7\u30ea\u30f3\u30b0'
    • rev = 65
    • ).send_page undefined
  3. /home/ubuntu/prj/sakitojp/moin/MoinMoin/Page.py in send_page (self=<MoinMoin.Page.Page instance>, request=<MoinMoin.request.RequestWSGI object>, msg=u'<strong>Revision 65 as of 2005-09-04 11:51:03</strong><br>', **keywords={})

    1. 1254 format_args=pi_formatargs,
    2. 1255 do_cache=do_cache,
    3. 1256 start_line=pi_lines)
    4. 1257
    5. 1258 # check for pending footnotes
    • start_line undefined
    • pi_lines = 1
  4. /home/ubuntu/prj/sakitojp/moin/MoinMoin/Page.py in send_page_content (self=<MoinMoin.Page.Page instance>, request=<MoinMoin.request.RequestWSGI object>, Parser=<class MoinMoin.parser.wiki.Parser>, body=u'[[TableOfContents]]\n\n= \u6982\u8981 =\n["\u30c7\u30fc\u30bf\u30e2\u30c7\u30ea\u30f3\u30b0"]\u306f\u6839\u6e90\u306b["\u30c7\u30fc...\u6587\u7528\u7d19\u300d\u7de8]\n\n----\nCategoryPrograming\nCategoryDatabase\n', format_args='', do_cache=1, **kw={'start_line': 1})

    1. 1341
    2. 1342 if not (do_cache and self.canUseCache(Parser)):
    3. 1343 self.format(parser)
    4. 1344 else:
    5. 1345 try:
    • self = <MoinMoin.Page.Page instance>
    • self.format = <bound method Page.format of <MoinMoin.Page.Page instance>>
    • parser = <MoinMoin.parser.wiki.Parser instance>
  5. /home/ubuntu/prj/sakitojp/moin/MoinMoin/Page.py in format (self=<MoinMoin.Page.Page instance>, parser=<MoinMoin.parser.wiki.Parser instance>)

    1. 1365 def format(self, parser):
    2. 1366 """ Format and write page content without caching """
    3. 1367 parser.format(self.formatter)
    4. 1368
    5. 1369 def execute(self, request, parser, code):
    • parser = <MoinMoin.parser.wiki.Parser instance>
    • parser.format = <bound method Parser.format of <MoinMoin.parser.wiki.Parser instance>>
    • self = <MoinMoin.Page.Page instance>
    • self.formatter = <MoinMoin.formatter.text_html.Formatter instance>
  6. /home/ubuntu/prj/sakitojp/moin/MoinMoin/parser/wiki.py in format (self=<MoinMoin.parser.wiki.Parser instance>, formatter=<MoinMoin.formatter.text_html.Formatter instance>)

    1. 1098
    2. 1099 # Scan line, format and write
    3. 1100 formatted_line = self.scan(scan_re, line)
    4. 1101 self.request.write(formatted_line)
    5. 1102
    • formatted_line = u'<p class="line867"><a href="http://www.amazon.co...mg/amazon.png" />\u30c7\u30fc\u30bf\u30e2\u30c7\u30ea\u30f3\u30b0\u57fa\u790e\u8b1b\u5ea7\u2015\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u8a2d\u8a08\u3092\u697d\u3057\u3082\u3046!</a> '
    • self = <MoinMoin.parser.wiki.Parser instance>
    • self.scan = <bound method Parser.scan of <MoinMoin.parser.wiki.Parser instance>>
    • scan_re = <_sre.SRE_Pattern object>
    • line = u'[[ISBN(4798103853 \u5b9f\u8df5\u7684\u30c7\u30fc\u30bf\u30e2\u30c7\u30ea\u30f3\u30b0\u5165\u9580 DB magazine selection)]] '
  7. /home/ubuntu/prj/sakitojp/moin/MoinMoin/parser/wiki.py in scan (self=<MoinMoin.parser.wiki.Parser instance>, scan_re=<_sre.SRE_Pattern object>, line=u'[[ISBN(4798103853 \u5b9f\u8df5\u7684\u30c7\u30fc\u30bf\u30e2\u30c7\u30ea\u30f3\u30b0\u5165\u9580 DB magazine selection)]] ')

    1. 874 self.in_table or self.in_list):
    2. 875 result.append(self.formatter.paragraph(1, css_class="line867"))
    3. 876 result.append(self.replace(match))
    4. 877 lastpos = match.end()
    5. 878
    • result = ['<p class="line867">']
    • result.append = <built-in method append of list object>
    • self = <MoinMoin.parser.wiki.Parser instance>
    • self.replace = <bound method Parser.replace of <MoinMoin.parser.wiki.Parser instance>>
    • match = <_sre.SRE_Match object>
  8. /home/ubuntu/prj/sakitojp/moin/MoinMoin/parser/wiki.py in replace (self=<MoinMoin.parser.wiki.Parser instance>, match=<_sre.SRE_Match object>)

    1. 903 # Get replace method and replece hit
    2. 904 replace = getattr(self, '_' + type + '_repl')
    3. 905 result.append(replace(hit))
    4. 906 return ''.join(result)
    5. 907 else:
    • result = []
    • result.append = <built-in method append of list object>
    • replace = <bound method Parser._macro_repl of <MoinMoin.parser.wiki.Parser instance>>
    • hit = u'[[ISBN(4798103853 \u5b9f\u8df5\u7684\u30c7\u30fc\u30bf\u30e2\u30c7\u30ea\u30f3\u30b0\u5165\u9580 DB magazine selection)]]'
  9. /home/ubuntu/prj/sakitojp/moin/MoinMoin/parser/wiki.py in _macro_repl (self=<MoinMoin.parser.wiki.Parser instance>, word=u'[[ISBN(4798103853 \u5b9f\u8df5\u7684\u30c7\u30fc\u30bf\u30e2\u30c7\u30ea\u30f3\u30b0\u5165\u9580 DB magazine selection)]]')

    1. 848 if self.macro is None:
    2. 849 self.macro = wikimacro.Macro(self)
    3. 850 return self.formatter.macro(self.macro, macro_name, args)
    4. 851
    5. 852 def scan(self, scan_re, line):
    • self = <MoinMoin.parser.wiki.Parser instance>
    • self.formatter = <MoinMoin.formatter.text_html.Formatter instance>
    • self.formatter.macro = <bound method Formatter.macro of <MoinMoin.formatter.text_html.Formatter instance>>
    • self.macro = <MoinMoin.wikimacro.Macro instance>
    • macro_name = u'ISBN'
    • args = u'4798103853 \u5b9f\u8df5\u7684\u30c7\u30fc\u30bf\u30e2\u30c7\u30ea\u30f3\u30b0\u5165\u9580 DB magazine selection'
  10. /home/ubuntu/prj/sakitojp/moin/MoinMoin/formatter/base.py in macro (self=<MoinMoin.formatter.text_html.Formatter instance>, macro_obj=<MoinMoin.wikimacro.Macro instance>, name=u'ISBN', args=u'4798103853 \u5b9f\u8df5\u7684\u30c7\u30fc\u30bf\u30e2\u30c7\u30ea\u30f3\u30b0\u5165\u9580 DB magazine selection')

    1. 288 def macro(self, macro_obj, name, args):
    2. 289 # call the macro
    3. 290 return macro_obj.execute(name, args)
    4. 291
    5. 292 def _get_bang_args(self, line):
    • macro_obj = <MoinMoin.wikimacro.Macro instance>
    • macro_obj.execute = <bound method Macro.execute of <MoinMoin.wikimacro.Macro instance>>
    • name = u'ISBN'
    • args = u'4798103853 \u5b9f\u8df5\u7684\u30c7\u30fc\u30bf\u30e2\u30c7\u30ea\u30f3\u30b0\u5165\u9580 DB magazine selection'
  11. /home/ubuntu/prj/sakitojp/moin/MoinMoin/wikimacro.py in execute (self=<MoinMoin.wikimacro.Macro instance>, macro_name=u'ISBN', args=u'4798103853 \u5b9f\u8df5\u7684\u30c7\u30fc\u30bf\u30e2\u30c7\u30ea\u30f3\u30b0\u5165\u9580 DB magazine selection')

    1. 108 self.name = macro_name
    2. 109 try:
    3. 110 execute = wikiutil.importPlugin(self.cfg, 'macro', macro_name)
    4. 111 except wikiutil.PluginMissingError:
    5. 112 try:
    • execute undefined
    • global wikiutil = <module 'MoinMoin.wikiutil' from '/home/ubuntu/prj/sakitojp/moin/MoinMoin/wikiutil.pyc'>
    • wikiutil.importPlugin = <function importPlugin>
    • self = <MoinMoin.wikimacro.Macro instance>
    • self.cfg = <sakito.Config instance>
    • macro_name = u'ISBN'
  12. /home/ubuntu/prj/sakitojp/moin/MoinMoin/wikiutil.py in importPlugin (cfg=<sakito.Config instance>, kind='macro', name=u'ISBN', function='execute')

    1. 802 """
    2. 803 try:
    3. 804 return importWikiPlugin(cfg, kind, name, function)
    4. 805 except PluginMissingError:
    5. 806 return importBuiltinPlugin(kind, name, function)
    • global importWikiPlugin = <function importWikiPlugin>
    • cfg = <sakito.Config instance>
    • kind = 'macro'
    • name = u'ISBN'
    • function = 'execute'
  13. /home/ubuntu/prj/sakitojp/moin/MoinMoin/wikiutil.py in importWikiPlugin (cfg=<sakito.Config instance>, kind='macro', name=u'ISBN', function='execute')

    1. 815 raise PluginMissingError
    2. 816 moduleName = '%s.plugin.%s.%s' % (cfg.siteid, kind, name)
    3. 817 return importNameFromPlugin(moduleName, function)
    4. 818
    5. 819
    • global importNameFromPlugin = <function importNameFromPlugin>
    • moduleName = u'sakito.plugin.macro.ISBN'
    • function = 'execute'
  14. /home/ubuntu/prj/sakitojp/moin/MoinMoin/wikiutil.py in importNameFromPlugin (moduleName=u'sakito.plugin.macro.ISBN', name='execute')

    1. 834 Raise PluginAttributeError if name does not exists.
    2. 835 """
    3. 836 module = __import__(moduleName, globals(), {}, [name])
    4. 837 try:
    5. 838 return getattr(module, name)
    • module undefined
    • builtin __import__ = <built-in function __import__>
    • moduleName = u'sakito.plugin.macro.ISBN'
    • builtin globals = <built-in function globals>
    • name = 'execute'

SyntaxError

Non-ASCII character '\xa5' in file /home/ubuntu/prj/moindata/data/plugin/macro/ISBN.py on line 22, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details (ISBN.py, line 22)

  • args = (r"Non-ASCII character '\xa5' in file /home/ubuntu/... http://python.org/dev/peps/pep-0263/ for details", ('/home/ubuntu/prj/moindata/data/plugin/macro/ISBN.py', 22, 0, None))
  • filename = '/home/ubuntu/prj/moindata/data/plugin/macro/ISBN.py'
  • lineno = 22
  • message = ''
  • msg = r"Non-ASCII character '\xa5' in file /home/ubuntu/... http://python.org/dev/peps/pep-0263/ for details"
  • offset = 0
  • print_file_and_line = None
  • text = None

System Details

  • Date: Thu, 28 Mar 2024 13:44:41 +0000
  • Platform: Linux sakitojp 5.4.0-1060-aws #63~18.04.1-Ubuntu SMP Mon Nov 15 14:31:31 UTC 2021 x86_64
  • Python: Python 2.7.17 (/opt/uwsgi/bin/uwsgi2)
  • MoinMoin: Release 1.5.9 (release)